#! /usr/bin/env node

// #! 符号的名称叫 Shebang，用于指定脚本的解释程序
// Node CLI 应用入口文件必须要有这样的文件头
// 如果是Linux 或者 macOS 系统下还需要修改此文件的读写权限为 755
// 具体就是通过 chmod 755 cli.js 实现修改

import fs from 'fs';
import { fileURLToPath } from 'url';
import path from 'path';

import { program } from 'commander';
import chalk from 'chalk';
import inquirer from 'inquirer';
import ora from 'ora';
import figlet from 'figlet';

// 获取package文件信息
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename)
let packagePath = path.join(__dirname, './package.json');
const packageJson = JSON.parse(fs.readFileSync(packagePath, 'utf8'));

// 设置帮助信息
program
    .version(`v${packageJson.version}`) //帮助信息中展示版本号

// --help
program
    // 监听 --help 执行
    .on('--help', () => {
        // 使用 figlet 绘制 Logo
        console.log(
            '\r\n' +
            figlet.textSync(packageJson.name, {
                font: 'Ghost',
                horizontalLayout: 'default',
                verticalLayout: 'default',
                // width: 80,
                whitespaceBreak: true,
            })
        )
        // 说明信息
        console.log(`\r\nRun ${chalk.green(`mycli <command> --help`)} for detailed usage of given command\r\n`)
    })

// 设置帮助信息
program
    .command('create <name>') //命令 create 项目名
    .description('create a new project') //描述
    // -f or --force 为强制创建，如果创建的目录存在则直接覆盖
    .option('-f, --force', '如果目标目录存在，则覆盖该目录')
    .action(async (name, options) => {
        // 打印命令行输入的值
        // console.log("project name is " +name)
        // const create = await import('./lib/create.js');
        // console.log(create.default());
        import('./lib/create.js').then(res => {
            res.default(name, options)

            // inquirer
            //     .prompt([
            //         {
            //             type: 'input', //type： input, number, confirm, list, checkbox ...
            //             name: 'name', // key 名
            //             message: 'Project name', // 提示信息
            //             default: 'my-node-cli', // 默认值
            //         },
            //     ])
            //     .then((answers) => {
            //         // 打印互用输入结果
            //         console.log(answers)
            //         // 初始化 => 下载中 => 下载完成

            //         // 自定义文本信息
            //         const message = '开始下载'
            //         // 初始化
            //         const spinner = ora(message)
            //         // 开始加载动画
            //         spinner.start()
            //         // 经过2秒的初始化时间，进入到下载的阶段
            //         setTimeout(() => {
            //             // 修改动画样式
            //             spinner.color = 'red'
            //             spinner.text = '下载中'
            //             // 经过2秒的下载时间 => 下载完成
            //             setTimeout(() => {
            //                 // 加载状态修改
            //                 spinner.stop() // 停止
            //                 spinner.succeed('下载完成') // 成功 ✔
            //                 // spinner.fail('下载失败');  // 失败 ✖
            //                 // spinner.warn('提示');  // 提示 ⚠
            //                 // spinner.info('信息');  // 信息 ℹ
            //             }, 2000)
            //         }, 2000)
            //     })
        })



    })


// // 文本样式
// console.log('project name is ' + chalk.bold('name'))

// // 颜色
// console.log('project name is ' + chalk.cyan('name'))
// console.log('project name is ' + chalk.green('name'))

// // 背景色
// console.log('project name is ' + chalk.bgRed('name'))

// // 使用RGB颜色输出
// console.log('project name is ' + chalk.rgb(4, 156, 219).underline('name'))
// console.log('project name is ' + chalk.hex('#049CDB').bold('name'))
// console.log('project name is ' + chalk.bgHex('#049CDB').bold('name'))

// 固定写法 解析用户执行命令传入参数
program.parse(process.argv);
